
#include "mem_malloc.h"

void main(void){
	print_mem_info(); //打印内存信息
	printf("------test_malloc-------\n");
	int size=30;
	printf("未使用的堆内存空间：\r\n");
	print_mem_hex();

	//1、使用 mem_malloc 或 mem_realloc 函数申请指定大小的内存块（返回内存块的表序号）
	printf("使用mem_malloc()来申请堆内存空间\r\n");
	unsigned int memId=mem_malloc(size);
	if (memId==0)
	{
		printf("申请堆内存失败!\r\n");
		return ;
	}
	printf("得到的表序号为：memId:%d\r\n",memId);
	print_mem_hex();
	//2、当需要使用该内存块，使用表序号获取内存块的起始地址
	char *p = mem_buffer(memId);
	printf("得到第%d块堆空间的起始地址为：%o\r\n",memId,p);
	print_mem_hex();
	printf("往该块堆内存块填充数据0xFF\r\n");
	memset(p, 0xFF, size);
	print_mem_hex();
	printf("重申请堆内存大小\r\n");
	size=10;
	if(mem_realloc(memId, size)==0){
		printf("申请失败");
		mem_free(memId);
		return ;
	}
	p = mem_buffer(memId);
	printf("得到第%d块堆空间的起始地址为：%o\r\n",memId,p);
	print_mem_hex();
	printf("往该块堆内存块填充数据0xAA\r\n");
	memset(p, 0xAA, size);
	print_mem_hex();
	mem_free(memId);
} 

#define SIZE 128
static char memer[128];

int main2(){
	//1、声明静态内存堆对象
	static mem_heap heap={.size=SIZE,.sum=0,.mem=&memer[0]};
	printf("测试内存堆信息打印\r\n");
	print_heap_info(&heap);
	print_heap_hex(&heap);

	int heapId=heap_malloc(&heap,50);
	printf("申请堆内存的表序号：%d\r\n",heapId);
	print_heap_hex(&heap);
	//2、通过表序号获取堆空间的起始地址
	printf("往申请到的内存空间打印0xAA数据\r\n");
	char* p=heap_buffer(&heap,heapId);
	if(p==NULL){
		printf("获取地址错误\r\n");
		return -1;
	}
	memset(p,0xAA,50);
	print_heap_hex(&heap);
	printf("重新申请内存空间\r\n");
	if(heap_realloc(&heap,heapId,20)==0){
		printf("重新申请内存空间失败\r\n");
	}
	print_heap_hex(&heap);
	printf("往申请到的内存空间打印0xFF数据\r\n");
	p=heap_buffer(&heap,heapId);
	if(p==NULL){
		printf("获取地址错误\r\n");
		return -1;
	}
	memset(p,0xFF,50);
	print_heap_hex(&heap);
	printf("释放堆内存\r\n");
	heap_free(&heap,heapId);
	print_heap_hex(&heap);
}